﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SMA.GENTEv1.Dados;

namespace SMA.GENTEv1
{
    public class Cidade
    {
        #region Variaveis Membro
        private int _idCidade;
        private string _nomeCidade;
        private Uf _uf;
        private GENTEEntities _context;
        #endregion

        #region Parametros
        public int IdCidade
        {
            get { return _idCidade; }
            set { _idCidade = value; }
        }
        public string NomeCidade
        {
            get { return _nomeCidade; }
            set { _nomeCidade = value; }
        }
        public Uf Uf
        {
            get { return _uf; }
            set { _uf = value; }
        }
        #endregion

        #region Construtores
        public Cidade()
        {
            try
            {
                _context = new GENTEEntities();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public Cidade(int idCidade)
        {
            try
            {
                _context = new GENTEEntities();
                Carregar(idCidade);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Privados
        protected void Carregar(int idCidade)
        {
            try
            {
                var consulta = from c in _context.tab_cidade
                               where c.id_cidade == idCidade
                               select new
                               {
                                   c.id_cidade,
                                   c.cidade,
                                   c.tab_uf.id_uf
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this._idCidade = list.id_cidade;
                    this._nomeCidade = list.cidade;
                    this._uf = new Uf(list.id_uf);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Publicos
        public List<Cidade> SelectAll()
        {
            try
            {
                List<Cidade> listCidade = new List<Cidade>();

                var consulta = from c in _context.tab_cidade
                               select new
                               {
                                   c.id_cidade,
                                   c.cidade,
                                   c.tab_uf.id_uf
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    Cidade cidade = new Cidade();
                    cidade._idCidade = list.id_cidade;
                    cidade._nomeCidade = list.cidade;
                    cidade._uf = new Uf(list.id_uf);

                    listCidade.Add(cidade);
                }
                return listCidade;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<Cidade> SelectUf(int idUf)
        {
            try
            {
                List<Cidade> listCidade = new List<Cidade>();

                var consulta = from c in _context.tab_cidade
                               where c.tab_uf.id_uf == idUf
                               select new
                               {
                                   c.id_cidade,
                                   c.cidade,
                                   c.tab_uf.id_uf
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    Cidade cidade = new Cidade();
                    cidade._idCidade = list.id_cidade;
                    cidade._nomeCidade = list.cidade;
                    cidade._uf = new Uf(list.id_uf);

                    listCidade.Add(cidade);
                }
                return listCidade;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
    }
}
